package com.ruoyi.ldzlsb.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.ldzlsb.domain.SbEquipment;
import com.ruoyi.ldzlsb.domain.vo.SbEquipmentVo;

/**
 * 设备台账Service接口
 * 
 * @author ruoyi
 */
public interface ISbEquipmentService {
    /**
     * 查询设备台账列表
     * 
     * @param sbEquipmentVo 设备台账
     * @return 设备台账集合
     */
    List<SbEquipmentVo> selectSbEquipmentList(SbEquipmentVo sbEquipmentVo);
    
    /**
     * 查询设备台账详情
     * 
     * @param equipmentId 设备ID
     * @return 设备台账
     */
    SbEquipmentVo selectSbEquipmentByEquipmentId(Long equipmentId);

    /**
     * 新增设备台账
     * 
     * @param sbEquipmentVo 设备台账
     * @return 结果
     */
    int insertSbEquipment(SbEquipmentVo sbEquipmentVo);

    /**
     * 修改设备台账
     * 
     * @param sbEquipmentVo 设备台账
     * @return 结果
     */
    int updateSbEquipment(SbEquipmentVo sbEquipmentVo);

    /**
     * 批量删除设备台账
     * 
     * @param equipmentIds 需要删除的设备ID
     * @return 结果
     */
    int deleteSbEquipmentByIds(Long[] equipmentIds);

    /**
     * 生成设备编码
     * 
     * @param type 设备类型编码
     * @return 设备编码
     */
    String generateEquipmentCode(String type);
    
    /**
     * 更新设备状态
     * 
     * @param equipmentId 设备ID
     * @param status 状态
     * @param reason 原因
     * @return 结果
     */
    int updateStatus(Long equipmentId, String status, String reason);
    
    /**
     * 获取设备状态统计
     * 
     * @return 设备状态统计
     */
    Map<String, Object> getStatusStats();
    
    /**
     * 获取设备点检记录
     * 
     * @param equipmentId 设备ID
     * @return 点检记录列表
     */
    List<Map<String, Object>> getInspectionRecords(Long equipmentId);
    
    /**
     * 获取设备保养记录
     * 
     * @param equipmentId 设备ID
     * @return 保养记录列表
     */
    List<Map<String, Object>> getMaintenanceRecords(Long equipmentId);
    
    /**
     * 获取设备维修记录
     * 
     * @param equipmentId 设备ID
     * @return 维修记录列表
     */
    List<Map<String, Object>> getRepairRecords(Long equipmentId);

    /**
     * 根据设备类型ID删除设备
     * 
     * @param equipmentTypeId 设备类型ID
     * @return 结果
     */
    int deleteSbEquipmentByTypeId(Long equipmentTypeId);

    /**
     * 检查设备编码是否已存在（排除自身ID）
     * 
     * @param equipmentCode 设备编码
     * @param equipmentId 设备ID（需要排除的ID）
     * @return 结果
     */
    int checkEquipmentCodeExistsExcludeSelf(String equipmentCode, Long equipmentId);

    /**
     * 检查设备编码是否已存在
     * 
     * @param equipmentCode 设备编码
     * @return 结果
     */
    int checkEquipmentCodeExists(String equipmentCode);
    
    /**
     * 统计指定类型的设备数量
     * 
     * @param typeId 设备类型ID
     * @return 设备数量
     */
    int countEquipmentByTypeId(Long typeId);
}
